home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / ACGIFREE.ZIP / INCLUDE / A_CSET.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-12  |  6.3 KB  |  151 lines

  1. //a_Character sets and such
  2.  
  3. #ifndef __RTTI__
  4. #error Must have RTTI enabled in order to use matrix derived classes
  5. #endif
  6.  
  7. //a_Include the character sets to use
  8. #include "a_cseng.h"         //a_English set
  9. #include "a_csnum.h"         //a_Number/Symbol set
  10.  
  11. ////////////////////////////////////////////////////
  12. // ACharSetItem - the character set to use
  13. ////////////////////////////////////////////////////
  14. class ACharSetItem : public ADataItem
  15. {
  16.   public:
  17.     BYTE *pbaaChar,               //a_The character set array of arrays (a matrix)
  18.          *pbaMap;                 //a_The map to the character
  19.  
  20.     int  cType,                   //a_One letter description of the font in use
  21.          iCharWidth,              //a_The width of all character matrices
  22.          iCharHeight,             //a_The height of all character matrices
  23.          iLineHeight,             //a_Height of the line to include all characters without clipping
  24.          iMapSize,                //a_Size of the mapping array (ie # of characters)
  25.          iArraySize,              //a_Each array of the character is iCharWidth * iCharHeight / 8
  26.          iBaseline;               //a_The baseline for all the characters (suggested by the set designer)
  27.  
  28.     ACharSetItem(void)
  29.     {
  30.       cType = '\x0';
  31.       pbaaChar =pbaMap =NULL;
  32.       iMapSize = - 0x1;
  33.       iCharWidth = iCharHeight = iArraySize = -0x1;
  34.       iBaseline = iLineHeight = -0x1;
  35.     }
  36.  
  37.     int csetIsValid(void)
  38.     {
  39.       //a_Superfiscial validation
  40.       if (!cType) return 0x0;
  41.       if (!pbaaChar || !pbaMap || iMapSize < 0x0 || iArraySize < 0x0) return 0x0;
  42.       if (iCharWidth < 0x0 || iCharHeight < 0x0 || iBaseline < 0x0 || iLineHeight < 0x0) return 0x0;
  43.       return 0x1;
  44.     }
  45.  
  46.     //a_Declares debug/dump related functions
  47.     #ifdef _DEBUG_DUMP_
  48.       void dump(void);     //a_Debugging dump, when _DEBUG_DUMP_ is set
  49.     #endif
  50. };
  51.  
  52. //a_Macro for setting the CHARSET array with global variables in a_csXXX.h files
  53. #define SET_CHARSET(classCS, type) do { \
  54.                                    (##classCS).pbaaChar    = (BYTE *)BYTEMATRIX_CHARSET_##type; \
  55.                                    (##classCS).pbaMap      = (BYTE *)BYTEARRAY_MAP_##type;      \
  56.                                    (##classCS).iMapSize    = CSET_MAPSIZE_##type;               \
  57.                                    (##classCS).cType       = CSET_TYPE_##type;                  \
  58.                                    (##classCS).iArraySize  = CSET_ARRAYSIZE_##type;             \
  59.                                    (##classCS).iCharWidth  = CSET_CHARSIZE_X_##type;            \
  60.                                    (##classCS).iCharHeight = CSET_CHARSIZE_Y_##type;            \
  61.                                    (##classCS).iBaseline   = CSET_CHARBASELINE_##type;          \
  62.                                    (##classCS).iLineHeight = CSET_CHARLINEHEIGHT_##type;        \
  63.                                  } while(0x0);
  64.  
  65. //a_Macros to get size of the charset
  66. #define CHARSET_WIDTH(type)  (CSET_CHARSIZE_X_##type)
  67. #define CHARSET_HEIGHT(type) (CSET_CHARSIZE_Y_##type)
  68.  
  69. /////////////////////////////////////////////////////////////
  70. // ACharSetList - contains the character sets
  71. /////////////////////////////////////////////////////////////
  72. class ACharSetList : public AList
  73. {
  74.   public:
  75.     void  cslInitialize(const char *pccFontOrder);
  76.     BYTE *cslGetArrayInCharSet(char cGet, ACharSetItem *&pcsiCurrent, const char *pccSets = NULL);
  77.     ACharSetItem *cslGetSetFromType(char cType);
  78.  
  79.     //a_Declares debug/dump related functions
  80.     #ifdef _DEBUG_DUMP_
  81.       void dump(void);     //a_Debugging dump, when _DEBUG_DUMP_ is set
  82.     #endif
  83.  
  84.   protected:
  85.     void _cslAddAfter(ACharSetItem *pcsiAdd, char cAddAfter);
  86.  
  87. };
  88.  
  89. /////////////////////////////////////////////////////////////////////////
  90. // AChar - contains 1 character in a bit-packed ABitmatrix-type object
  91. /////////////////////////////////////////////////////////////////////////
  92. class AChar : public ABitMatrix
  93. {
  94.   public:
  95.     AChar()
  96.     {
  97.       m_iBitWidth = m_iBitHeight = m_iBitBaseline = 0x0;
  98.     }
  99.     virtual ~AChar() {}
  100.  
  101.     //a_Sets up this class for the character specified by a BYTE array using the params
  102.     void charSet(BYTE *pbChar, int iArraySize, int iSX, int iSY);
  103.     int  charGetWidthOnly(BYTE *pbChar, int iArraySize, int iSX) const;
  104.  
  105.     //a_Access members
  106.     int charGetBitWidth(void)    const { return m_iBitWidth; }
  107.     int charGetBitHeight(void)   const { return m_iBitHeight; }
  108.     int charGetBitBaseline(void) const { return m_iBitBaseline; }
  109.  
  110.   protected:
  111.     //a_NOTE: m_iX and m_iY are the physical dimensions of the character set
  112.     int m_iBitWidth,        //a_The actual width specified by the characted
  113.         m_iBitHeight,       //a_The actual height specified by the character
  114.         m_iBitBaseline;     //a_The baseline of this character (spoecified by the character)
  115.  
  116. };
  117.  
  118. /////////////////////////////////////////////////////////////////////////////////////////
  119. // ACharSetMatrix - Character set matrix based on ABitMatrix and uses AChar which is based in ABitMatrix
  120. /////////////////////////////////////////////////////////////////////////////////////////
  121. class ACharSetMatrix : public ABitMatrix
  122. {
  123.   public:
  124.     ACharSetMatrix(const char *pccFonts = NULL);
  125.     ~ACharSetMatrix();
  126.  
  127.     //a_Declares debug/dump related functions
  128.     #ifdef _DEBUG_DUMP_
  129.       void dump(void);     //a_Debugging dump, when _DEBUG_DUMP_ is set
  130.     #endif
  131.  
  132.     //a_Linked list of characters sets in use
  133.     ACharSetList m_cslCharSets;       
  134.  
  135.     //a_Character set based output.  Works with a given ACharSet class
  136.     //a_Map text top current set and map to ABitMatrix (see TEXTOUT structure above)  
  137.     //a_Simple wrapper for the extended one
  138.     int csmTextOut(const char *pccOut, int iLength = -1, int iPX = 0x0, int iPY = 0x0, int iLineHeight = -1, int iBaseline = -1);  
  139.     //a_The full control one (a much better choice with more control)
  140.     int csmTextOutEx(TEXTOUT& tOut);                         //a_Extended text out
  141.  
  142.     //a_Calculates the length of a string
  143.     int csmGetTextExtent(const char *pccOut, int iLength = -1);
  144.     int csmGetTextExtent(TEXTOUT &tOut);
  145.  
  146.   protected:
  147.     //a_Basic validation routine
  148.     int _csmIsValidTEXTOUT(TEXTOUT &tOut);
  149.  
  150. };
  151.